package com.moliku.insurance.common.conver;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.moliku.insurance.common.util.MapperUtils;


import java.util.Collection;
import java.util.List;

/**
 * 对象映射
 *
 * @author Mr.Liu
 * @since 2020-02-23
 */
public interface MapperConverter {
    /**
     * 单个对象类型映射转换
     *
     * @param source 转换类型对象
     * @param target 目标类型对象
     * @param <T>    T
     * @param <E>    E
     * @return <T,E>
     */
    default <T, E> E map(T source, Class<E> target) {
        return MapperUtils.INSTANCE.map(source, target);
    }

    /**
     * 集合对象类型映射转换
     *
     * @param source 转换类型对象
     * @param target 目标类型对象
     * @param <T>    T
     * @param <E>    E
     * @return <T,E>
     */
    default <E, T> List<E> mapAsList(Collection<T> source, Class<E> target) {
        return MapperUtils.INSTANCE.mapAsList(source, target);
    }

    /**
     * 分页对象类型映射转换
     *
     * @param page   转换类型对象
     * @param target 目标类型对象
     * @param <T>    T
     * @param <E>    E
     * @return <T,E>
     */
    default <E, T> IPage<E> mapAsPage(IPage<T> page, Class<E> target) {
        List<E> records = MapperUtils.INSTANCE.mapAsList(page.getRecords(), target);
        IPage<E> pager = new Page<>();
        pager.setPages(page.getPages());
        pager.setRecords(records);
        pager.setTotal(page.getTotal());
        pager.setSize(page.getSize());
        pager.setCurrent(page.getCurrent());
        return pager;
    }

}
